package com.example.design.函数式编程.c柯里化;

public class Currying {

    @FunctionalInterface
    interface F2 {
        int op(int a, int b);
    }

    @FunctionalInterface
    interface Fa {
        Fb op(int a);
    }

    @FunctionalInterface
    interface Fb {
        int op(int b);
    }

    public static void main(String[] args) {
        // 多个参数的函数
        F2 f2 = (a, b) -> a + b;
        System.out.println(f2.op(10, 20));

        // 柯里化：接受多个参数的函数转换成一系列接受一个参数的函数。
        Fa fa = (a) -> (b) -> a + b;
        Fb op = fa.op(10);
        int op1 = op.op(20);
        System.out.println(op1);

        // 写成链式
        int op2 = fa.op(10).op(20);
        System.out.println(op2);
    }
}
